home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 49 / Amiga Format CD49 (2000-01-17)(Future Publishing)(GB)(Track 1 of 3)[!][issue 2000-02].iso / -serious- / graphics / amicad / arexx / importclip1.0.amicad < prev    next >
Text File  |  1999-12-06  |  9KB  |  338 lines

  1. /* Conversion d'un clip au format 1.0 dans le nouveau format (1.1) */
  2. /* Version 1.01: modification appel REQFILE */
  3. /* $VER: 1.01 (© R.Florac, 20/02/99) */
  4.  
  5. options results     /* indispensable pour récupérer le résultat des macros */
  6.  
  7. signal on error     /* pour l'interception des erreurs */
  8. signal on syntax
  9.  
  10. 'VERSION(0)'
  11. if result < 2 then do
  12.     'MESSAGE("Ce script nécessite"+CHR(10)+"AmiCAD version 2")'
  13.     exit
  14. end
  15.  
  16. 'REQFILE("Fichier à charger?","Travail:AmiCAD/Clips","")'; f=result
  17. if f="" then exit
  18.  
  19. if open(fichier,f,'READ') then do
  20.     entete=lire_chaine(fichier)
  21.     if entete~="AmiCADClip 1.0" then do
  22.     'MESSAGE("Format fichier incorrect")'
  23.     exit
  24.     end
  25.     'LOCK(-1):UNMARK(-1)'
  26.     objets=0; objet=0; gmaxi=0
  27.     nombre_objets=lire_valeur(fichier)
  28.     do until eof(fichier)
  29.     groupe=0
  30.     type=lire_octet(fichier)
  31.     if type='' then leave
  32.     if type>63 then do
  33.         if type>127 then do
  34.         groupe=1
  35.         type=type-128
  36.         end
  37.         if type>63 then do
  38.         largeur_trait=lire_octet(fichier)
  39.         type=type-64
  40.         end
  41.         else largeur_trait=1
  42.     end
  43.     if largeur_trait > 3 then largeur_trait=0-largeur_trait
  44.     if groupe~=0 then groupe=lire_valeur(fichier)
  45.     select
  46.         when type=1 then do     /* composant */
  47.         comp=lire_chaine(fichier)
  48.         circuit=lire_octet(fichier)
  49.         x0=lire_valeur(fichier)
  50.         y0=lire_valeur(fichier)
  51.         call lire_mode(fichier)
  52.         call lire_echelles(fichier)
  53.         'DRAWMODE('largeur_trait')'
  54.         'PUTPART("'comp'",'x0+10','y0+10')'; objet=result; composant=objet
  55.         'MARK('objet')'
  56.         'SETPINS('objet',1)'
  57.         'CONVERT('objet',0)'
  58.         objets=objets+1
  59.         end
  60.         when type=2 then do     /* fil de liaison */
  61.         x0=lire_valeur(fichier)
  62.         y0=lire_valeur(fichier)
  63.         x1=lire_valeur(fichier)
  64.         y1=lire_valeur(fichier)
  65.         'DRAWMODE(1):DRAW('x0+10','y0+10','x1+10','y1+10')'; objet=result
  66.         'MARK('objet')'
  67.         objets=objets+1
  68.         end
  69.         when type=3 then do     /* arc de cercle */
  70.         'DRAWMODE('largeur_trait')'
  71.         x0=lire_valeur(fichier)
  72.         y0=lire_valeur(fichier)
  73.         rh=lire_valeur(fichier)
  74.         rv=lire_valeur(fichier)
  75.         ad=lire_valeur(fichier)
  76.         af=lire_valeur(fichier)
  77.         'ARC('x0+10','y0+10','rh','rv','ad','af')'; objet=result
  78.         'MARK('objet')'
  79.         objets=objets+1
  80.         end
  81.         when type=4 then do     /* texte */
  82.         'DRAWMODE('largeur_trait')'
  83.         t=lire_chaine(fichier)
  84.         x0=lire_valeur(fichier)
  85.         y0=lire_valeur(fichier)
  86.         call lire_mode(fichier)
  87.         call lire_echelles(fichier)
  88.         'WRITE("'t'",'x0+10','y0+10')'; objet=result
  89.         'MARK('objet')'
  90.         objets=objets+1
  91.         end
  92.         when type=5 then do     /* référence composant */
  93.         'DRAWMODE('largeur_trait')'
  94.         t=lire_chaine(fichier)
  95.         x0=lire_valeur(fichier)
  96.         y0=lire_valeur(fichier)
  97.         call lire_mode(fichier)
  98.         call lire_echelles(fichier)
  99.         'WRITE("'t'",'x0+10','y0+10')'; objet=result
  100.         'LINKREF('composant','objet')'
  101.         'MARK('objet')'
  102.         objets=objets+1
  103.         end
  104.         when type=6 then do     /* valeur composant */
  105.         'DRAWMODE('largeur_trait')'
  106.         t=lire_chaine(fichier)
  107.         x0=lire_valeur(fichier)
  108.         y0=lire_valeur(fichier)
  109.         call lire_mode(fichier)
  110.         call lire_echelles(fichier)
  111.         'WRITE("'t'",'x0+10','y0+10')'; objet=result
  112.         'LINKVAL('composant','objet')'
  113.         'MARK('objet')'
  114.         objets=objets+1
  115.         end
  116.         when type=23 | type=7 then do    /* connexion */
  117.         x0=lire_valeur(fichier)
  118.         y0=lire_valeur(fichier)
  119.         call lire_echelles(fichier)
  120.         'JUNCTION('x0+10','y0+10')'; objet=result
  121.         if type=23 then 'CONVERT('objet',1)'
  122.         else 'CONVERT('objet',0)'
  123.         'MARK('objet')'
  124.         objets=objets+1
  125.         end
  126.         when type=8 then do     /* pointillés */
  127.         x0=lire_valeur(fichier)
  128.         y0=lire_valeur(fichier)
  129.         x1=lire_valeur(fichier)
  130.         y1=lire_valeur(fichier)
  131.         'DRAWMODE(0):DRAW('x0+10','y0+10','x1+10','y1+10')'; objet=result
  132.         'MARK('objet')'
  133.         objets=objets+1
  134.         end
  135.         when type=9 then do     /* bus */
  136.         x0=lire_valeur(fichier)
  137.         y0=lire_valeur(fichier)
  138.         x1=lire_valeur(fichier)
  139.         y1=lire_valeur(fichier)
  140.         'DRAWMODE(7):DRAW('x0+10','y0+10','x1+10','y1+10')'; objet=result
  141.         'MARK('objet')'
  142.         objets=objets+1
  143.         end
  144.         when type=10 then do    /* ellipse */
  145.         'DRAWMODE('largeur_trait')'
  146.         x0=lire_valeur(fichier)
  147.         y0=lire_valeur(fichier)
  148.         rh=lire_valeur(fichier)
  149.         rv=lire_valeur(fichier)
  150.         'ELLIPSE('x0+10','y0+10','rh','rv')'; objet=result
  151.         'MARK('objet')'
  152.         objets=objets+1
  153.         end
  154.         when type=11 then do    /* connecteur entrée */
  155.         'DRAWMODE('largeur_trait')'
  156.         t=lire_chaine(fichier)
  157.         x0=lire_valeur(fichier)
  158.         y0=lire_valeur(fichier)
  159.         call lire_mode(fichier)
  160.         call lire_echelles(fichier)
  161.         'INPUT("'t'",'x0+10','y0+10')'; objet=result
  162.         'MARK('objet')'
  163.         objets=objets+1
  164.         end
  165.         when type=12 then do    /* connecteur de sortie */
  166.         'DRAWMODE('largeur_trait')'
  167.         t=lire_chaine(fichier)
  168.         x0=lire_valeur(fichier)
  169.         y0=lire_valeur(fichier)
  170.         call lire_mode(fichier)
  171.         call lire_echelles(fichier)
  172.         'OUTPUT("'t'",'x0+10','y0+10')'; objet=result
  173.         'MARK('objet')'
  174.         objets=objets+1
  175.         end
  176.         when type=15 then do    /* trait double */
  177.         'DRAWMODE(2)'
  178.         x0=lire_valeur(fichier)
  179.         y0=lire_valeur(fichier)
  180.         x1=lire_valeur(fichier)
  181.         y1=lire_valeur(fichier)
  182.         'DRAW('x0+10','y0+10','x1+10','y1+10')'; objet=result
  183.         'MARK('objet')'
  184.         objets=objets+1
  185.         end
  186.         when type=16 then do    /* composant sans bornes */
  187.         comp=lire_chaine(fichier)
  188.         circuit=lire_octet(fichier)
  189.         x0=lire_valeur(fichier)
  190.         y0=lire_valeur(fichier)
  191.         call lire_mode(fichier)
  192.         call lire_echelles(fichier)
  193.         'DRAWMODE('largeur_trait')'
  194.         'PUTPART("'comp'",'x0+10','y0+10')'; objet=result; composant=objet
  195.         'SETPINS('objet',0)'
  196.         'CONVERT('objet',0)'
  197.         'MARK('objet')'
  198.         objets=objets+1
  199.         end
  200.         when type=17 then do    /* définition groupe */
  201.         do 5
  202.             lt=lire_valeur(fichier)
  203.         end
  204.         objets=objets+1
  205.         end
  206.         when type=19 then do    /* NOM_SYMBOLE_ALTERNÉ */
  207.         comp=lire_chaine(fichier)
  208.         circuit=lire_octet(fichier)
  209.         x0=lire_valeur(fichier)
  210.         y0=lire_valeur(fichier)
  211.         call lire_mode(fichier)
  212.         call lire_echelles(fichier)
  213.         'DRAWMODE('largeur_trait')'
  214.         'PUTPART("'comp'",'x0+10','y0+10')'; objet=result; composant=objet
  215.         'SETPINS('objet',1)'
  216.         'CONVERT('objet',1)'
  217.         'MARK('objet')'
  218.         objets=objets+1
  219.         end
  220.         when type=20 then do    /* NOM_SYMBOLE_ALTERNÉ_SANS_BORNES */
  221.         comp=lire_chaine(fichier)
  222.         circuit=lire_octet(fichier)
  223.         x0=lire_valeur(fichier)
  224.         y0=lire_valeur(fichier)
  225.         call lire_mode(fichier)
  226.         call lire_echelles(fichier)
  227.         'DRAWMODE('largeur_trait')'
  228.         'PUTPART("'comp'",'x0+10','y0+10')'; objet=result; composant=objet
  229.         'SETPINS('objet',0)'
  230.         'CONVERT('objet',1)'
  231.         'MARK('objet')'
  232.         objets=objets+1
  233.         end
  234.         when type=21 then do    /* Trait personnalisé */
  235.         lt=lire_octet(fichier)
  236.         'DRAWMODE('0-lt')'
  237.         x0=lire_valeur(fichier)
  238.         y0=lire_valeur(fichier)
  239.         x1=lire_valeur(fichier)
  240.         y1=lire_valeur(fichier)
  241.         'DRAW('x0+10','y0+10','x1+10','y1+10')'; objet=result
  242.         'MARK('objet')'
  243.         objets=objets+1
  244.         end
  245.         when type=22 then do    /* boîte */
  246.         lt=lire_octet(fichier)
  247.         'DRAWMODE('0-lt')'
  248.         x0=lire_valeur(fichier)
  249.         y0=lire_valeur(fichier)
  250.         x1=lire_valeur(fichier)
  251.         y1=lire_valeur(fichier)
  252.         'BOX('x0+10','y0+10','x1+10','y1+10')'; objet=result
  253.         'MARK('objet')'
  254.         objets=objets+1
  255.         end
  256.         otherwise do
  257.         'MESSAGE("Donnée inconnue: 'type'")'
  258.         leave
  259.         end
  260.     end
  261.     end
  262.     do i=1 to gmaxi
  263.     if g.i ~= "G."||i then 'GROUP('g.i')'
  264.     end
  265.     close(fichier)
  266.     if    nombre_objets~=objets then 'MESSAGE("ATTENTION:"+CHR(10)+"Le nombre d''objets lus"+CHR(10)+"('objets') est différent"+CHR(10)+"de celui attendu ('nombre_objets')")'
  267.     'UNLOCK(-1):REQUEST("Fin de fichier atteinte"+CHR(10)+"'objets' objets lus"+CHR(10)+CHR(10)+"Voulez-vous remplacer"+CHR(10)+"ce clip par la nouvelle"+CHR(10)+"version ?")'
  268.     if result=1 then do
  269.     'COPY(5):SAVECLIP(5,"'f'"):MACRO(7):MENU("Effacer")'
  270.     end
  271. end
  272.  
  273. exit
  274.  
  275. lire_mode: procedure
  276.     parse arg fichier
  277.     mode=lire_octet(fichier)
  278.     if mode>15 then mode=mode-16
  279.     if mode>7 then mode=mode-8
  280.     if mode>3 then do
  281.     'SYMMETRY(0,1)'
  282.     mode=mode-4
  283.     end
  284.     else 'SYMMETRY(0,0)'
  285.     'ROTATE(0,'mode')'
  286.     return
  287.  
  288. lire_echelles: procedure
  289.     parse arg fichier
  290.     eh=lire_octet(fichier)*100
  291.     ev=lire_octet(fichier)*100
  292.     'SETSCALE(0,'eh','ev')'
  293.     return
  294.  
  295. lire_chaine: procedure
  296.     parse arg fichier
  297.     l=""
  298.     do forever
  299.     c=readch(fichier,1)
  300.     if c='00'x then return l
  301.     l=l||c
  302.     end
  303.  
  304. lire_valeur: procedure
  305.     parse arg fichier
  306.     v=lire_octet(fichier)*256
  307.     v=v+lire_octet(fichier)
  308.     return v
  309.  
  310. lire_octet: procedure expose objets
  311.     parse arg fichier
  312.     c=readch(fichier,1)
  313.     if eof(fichier) then return "" /* do
  314.     close(fichier)
  315.     'MESSAGE("Fin de fichier atteinte"+CHR(10)+"'objets' objets lus"):UNLOCK(-1)'
  316.     exit
  317.     end */
  318.     v=0
  319.     if bittst(c,0) then v=1
  320.     if bittst(c,1) then v=v+2
  321.     if bittst(c,2) then v=v+4
  322.     if bittst(c,3) then v=v+8
  323.     if bittst(c,4) then v=v+16
  324.     if bittst(c,5) then v=v+32
  325.     if bittst(c,6) then v=v+64
  326.     if bittst(c,7) then v=v+128
  327.     return v
  328.  
  329. /* Traitement des erreurs, interruption du programme */
  330. syntax:
  331. erreur=RC
  332. 'MESSAGE("Erreur de syntaxe"+CHR(10)+"en ligne 'SIGL'"+CHR(10)+"'errortext(erreur)'"):UNLOCK(-1)'
  333. exit
  334.  
  335. error:
  336. 'MESSAGE("Erreur en ligne 'SIGL'"):UNLOCK(-1)'
  337. exit
  338.